package com.galen.manual.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.galen.manual.utils.SnowflakeIdGenerator;
import com.galen.manual.utils.SpringContextUtil;
// import lombok.Data;
// import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 基础实体类，包含公共字段
 */
// @Data
// @EqualsAndHashCode(callSuper = false)
public abstract class BaseEntity {

    /**
     * 主键ID（雪花算法生成）
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 删除标识（逻辑删除）
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }

    public Integer getDeleted() {
        return deleted;
    }

    public void setDeleted(Integer deleted) {
        this.deleted = deleted;
    }

    /**
     * 实体类创建前的回调方法
     * 在插入数据库前调用，用于生成ID等操作
     */
    public void preInsert() {
        if (this.id == null) {
            // 从Spring容器中获取雪花算法ID生成器
            SnowflakeIdGenerator idGenerator = SpringContextUtil.getBean(SnowflakeIdGenerator.class);
            this.id = idGenerator.nextId();
        }
        if (this.deleted == null) {
            this.deleted = 0;
        }
    }

    /**
     * 实体类更新前的回调方法
     * 在更新数据库前调用
     */
    public void preUpdate() {
        // 更新时可以在这里做一些处理
    }
}